package core.dao.impl;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import util.DbUtils;

import core.dao.SugerenciaDao;
import core.model.Sugerencia;

/**
 * @author andoniibarguchilorenzo
 * clase que contiene los metodos implementados de la interface SugerenciaDao
 */
public class SugerenciaDaoImpl extends GenericDaoImpl<Sugerencia, Integer>
		implements SugerenciaDao {

	@Override
	public void insertarSugerencia(Sugerencia sugerencia) {
		Connection connection = DbUtils.createInstance();
		PreparedStatement ps = null;
		try {
			// http://db.apache.org/derby/docs/10.7/ref/crefjavstateautogen.html
			ps = connection
					.prepareStatement(
							"INSERT INTO SUGERENCIA(COD_TIPO, FECHA, ASUNTO, DESCRIPCION, NICK) VALUES (?,CURRENT_TIMESTAMP,?,?,?)",
							PreparedStatement.RETURN_GENERATED_KEYS);
			ps.setInt(1, sugerencia.getCodigo_tipo());
			ps.setString(2, sugerencia.getAsunto());
			ps.setString(3, sugerencia.getDescripcion());
			ps.setString(4, sugerencia.getNick());

			ps.executeUpdate();

		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

	@Override
	public List<Sugerencia> getListaSugerencias() {
		Connection connection = DbUtils.createInstance();
		PreparedStatement ps = null;
		List<Sugerencia> sugerencias = new ArrayList<Sugerencia>();
		try {
			ps = connection
					.prepareStatement("SELECT COD_SUGERENCIA, COD_TIPO, ASUNTO, DESCRIPCION, NICK FROM SUGERENCIA");
			ResultSet rs = ps.executeQuery();
			Sugerencia sugerencia = null;

			while (rs.next()) {
				sugerencia = Sugerencia.createSugerencia(rs.getInt(1),
						rs.getInt(2), rs.getString(4),
						rs.getString(5), rs.getString(6));
				sugerencias.add(sugerencia);
			}

		} catch (SQLException e) {
			e.printStackTrace();
		}

		return sugerencias;
	}
	
	@Override
	public List<Sugerencia> getSugerenciasByCode(int cod_tipo) {
		Connection connection = DbUtils.createInstance();
		PreparedStatement ps = null;
		List<Sugerencia> sugerencias = new ArrayList<Sugerencia>();
		try {
			ps = connection
					.prepareStatement("SELECT COD_SUGERENCIA, COD_TIPO, ASUNTO, FECHA, DESCRIPCION, NICK FROM SUGERENCIA WHERE COD_TIPO = ?");
			ps.setInt(1, cod_tipo);

			
			ResultSet rs = ps.executeQuery();
			Sugerencia sugerencia = null;

			while (rs.next()) {
				sugerencia = Sugerencia.createSugerencia(rs.getInt(1), rs.getInt(2),
						rs.getString(3), rs.getTimestamp(4), rs.getString(5),
						rs.getString(6));
				sugerencias.add(sugerencia);
			}

		} catch (SQLException e) {
			e.printStackTrace();
		}

		return sugerencias;
	}


	public void deleteSugerencia(int cod_sugerencia) {

		Connection connection = DbUtils.createInstance();
		PreparedStatement ps = null;
		try {
			// http://db.apache.org/derby/docs/10.7/ref/crefjavstateautogen.html
			ps = connection
					.prepareStatement("DELETE FROM SUGERENCIA WHERE COD_SUGERENCIA = ?");
			ps.setInt(1, cod_sugerencia);
			ps.executeUpdate();

		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

	public void modifySugerencia(Sugerencia sugerencia) {
		Connection connection = DbUtils.createInstance();
		PreparedStatement ps = null;
		try {
			ps = connection
					.prepareStatement("UPDATE SUGERENCIA SET COD_TIPO = ? AND ASUNTO = ? AND DESCRIPCION = ? AND NICK = ? WHERE COD_SUGERENCIA = ?");
			ps.setInt(1, sugerencia.getCodigo_tipo());
			ps.setString(2, sugerencia.getAsunto());
			ps.setString(3, sugerencia.getDescripcion());
			ps.setString(4, sugerencia.getNick());
			ps.setInt(5, sugerencia.getCodigo_sugerencia());
			ps.executeUpdate();

		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	
	public Sugerencia getSugerencia(int cod_sugerencia)
	{
		Connection connection = DbUtils.createInstance();
		PreparedStatement ps = null;
		List<Sugerencia> sugerencias = new ArrayList<Sugerencia>();
		try {
			ps = connection
					.prepareStatement("SELECT COD_SUGERENCIA, COD_TIPO, ASUNTO, FECHA, DESCRIPCION, NICK FROM SUGERENCIA WHERE COD_SUGERENCIA = ?");
			ps.setInt(1, cod_sugerencia);

			
			ResultSet rs = ps.executeQuery();
			Sugerencia sugerencia = null;

			while (rs.next()) {
				sugerencia = Sugerencia.createSugerencia(rs.getInt(1), rs.getInt(2),
						rs.getString(3), rs.getTimestamp(4), rs.getString(5),
						rs.getString(6));
				sugerencias.add(sugerencia);
			}

		} catch (SQLException e) {
			e.printStackTrace();
		}

		return sugerencias.get(0);
	}

}
